package config

import (
	"fmt"
	"os"

	"gopkg.in/yaml.v3"
)

// Config 配置结构
type Config struct {
	Server ServerConfig `yaml:"server"`
	Device DeviceConfig `yaml:"device"`
	Client ClientConfig `yaml:"client"`
}

// ServerConfig 服务器配置
type ServerConfig struct {
	URL string `yaml:"url"`
}

// DeviceConfig 设备配置
type DeviceConfig struct {
	ProductID string `yaml:"product_id"`
	SN        string `yaml:"sn"`
	Version   string `yaml:"version"`
	Key       string `yaml:"key"`
}

// ClientConfig 客户端配置
type ClientConfig struct {
	CheckInterval   int    `yaml:"check_interval"`
	DownloadTimeout int    `yaml:"download_timeout"`
	TempDir         string `yaml:"temp_dir"`
	LogLevel        string `yaml:"log_level"`
}

// LoadConfig 从文件加载配置
func LoadConfig(filename string) (*Config, error) {
	data, err := os.ReadFile(filename)
	if err != nil {
		return nil, fmt.Errorf("读取配置文件失败: %v", err)
	}

	var config Config
	if err := yaml.Unmarshal(data, &config); err != nil {
		return nil, fmt.Errorf("解析配置文件失败: %v", err)
	}

	// 验证必要的配置项
	if config.Server.URL == "" {
		return nil, fmt.Errorf("服务器URL不能为空")
	}
	if config.Device.ProductID == "" {
		return nil, fmt.Errorf("产品ID不能为空")
	}
	if config.Device.SN == "" {
		return nil, fmt.Errorf("设备序列号不能为空")
	}
	if config.Device.Version == "" {
		return nil, fmt.Errorf("设备版本不能为空")
	}
	if config.Device.Key == "" {
		return nil, fmt.Errorf("签名密钥不能为空")
	}

	// 设置默认值
	if config.Client.CheckInterval <= 0 {
		config.Client.CheckInterval = 10
	}
	if config.Client.DownloadTimeout <= 0 {
		config.Client.DownloadTimeout = 300
	}
	if config.Client.TempDir == "" {
		config.Client.TempDir = "./temp"
	}
	if config.Client.LogLevel == "" {
		config.Client.LogLevel = "info"
	}

	return &config, nil
}
